package com.example.singleton;

/**
 * 双重判断懒加载   可见性
 * volatile
 * 不加volatile时指令重排可能指向一个没有对象的地址
 *
 * //1：分配对象的内存空间
 * memory=allocate();
 * //2：初始化对象
 * ctorInstance(memory);
 * //3：设置instance指向刚分配的内存地址
 * instance=memory;
 *
 * //1：分配对象的内存空间
 * memory=allocate();
 * //3：设置instance指向刚分配的内存地址，此时对象还没被初始化
 * instance=memory;
 * //2：初始化对象
 * ctorInstance(memory);
 */

public class Mgr05 {

    private static volatile Mgr05 INSTANCE;

    private Mgr05() {
    }

    public static Mgr05 getInstance(){
        if (INSTANCE==null){
            synchronized(Mgr05.class){
                if (INSTANCE==null){
                    INSTANCE=new Mgr05();
                }
            }
        }
        return INSTANCE;
    }


}
